function getSum(a, b, c) {
  return a + b + c;
}

function curry(f) {
  // 返回柯里化后的函数
  return function curriedF(...args) {
    // 对参数进行判断
    if (args.length < f.length) {
      return function (...otherArgs) {
        // 这里使用到了闭包获取到了 第一次传入的参数 args
        // 还进行了一下递归
        return curriedF(...args, ...otherArgs);
      };
    } else {
      return f(...args);
    }
  };
}

const curried = curry(getSum);

console.log(curried(1, 2, 3));
console.log(curried(1)(2, 3));
console.log(curried(1, 2)(3));
console.log(curried(1)(2)(3));

/*
 * @author: yang long
 * @date: 2022-04-23 13:48:37
 * @description: 总结
 * 1. 柯里化可以帮助我们记忆一些参数，也就是对参数的缓存
 * 2. 函数变得更加灵活，函数的颗粒度更加的小
 * 3. 可以将多元函数转换成一元函数，这样函数之间的组合就变多了，能实现的功能就会更加强大
 */
